package ip

import "net"

// ipv4IPW 结构体用于表示IPv4 IP地址的查询结果
// 该结构体包含以下字段：
//   - Result: 表示查询是否成功，类型为bool
//   - Code: 表示返回码，类型为string
//   - Message: 表示返回信息，类型为string
//   - IP: 表示查询到的IP地址，类型为string
//   - IPVersion: 表示IP地址的版本，类型为string
type ipv4IPW struct {
	Result    bool   `json:"result"`    // 是否成功
	Code      string `json:"code"`      // 返回码
	Message   string `json:"message"`   // 返回信息
	IP        string `json:"IP"`        // IP地址
	IPVersion string `json:"IPVersion"` // IP版本
}

// ipv4Uomg 结构体用于表示IPv4相关的用户操作信息。
// 该结构体包含以下字段：
//   - Code: 返回码，表示操作的结果状态。
//   - System: 系统信息，表示用户操作时所使用的操作系统。
//   - IP: IP地址，表示用户操作时的IP地址。
//   - Browser: 浏览器信息，表示用户操作时所使用的浏览器。
//   - Time: 时间，表示用户操作发生的时间。
type ipv4Uomg struct {
	Code    string `json:"code"`    // 返回码
	System  string `json:"system"`  // 系统
	IP      string `json:"ip"`      // IP地址
	Browser string `json:"browser"` // 浏览器
	Time    string `json:"time"`    // 时间
}

// IPManager 统一的IP管理结构体，绑定所有ip相关功能
type IPManager struct{}

// NewIPManager 创建并初始化一个新的IPManager实例
func NewIPManager() *IPManager {
	return &IPManager{}
}

// GetPublicIPv4 获取本机的公网IPv4地址
func (im *IPManager) GetPublicIPv4() (string, error) {
	return GetPublicIpv4()
}

// GetPublicIPv4Eth 获取指定网卡的公网IPv4地址
func (im *IPManager) GetPublicIPv4Eth(ethName string) (net.IP, error) {
	return GetPublicIpv4Eth(ethName)
}

// GetPublicIPv6 获取系统的公网IPv6地址
func (im *IPManager) GetPublicIPv6() ([]net.IP, error) {
	return GetPublicIpv6()
}

// GetIPv6 获取系统中所有的非回环、非链路本地和非临时的IPv6地址
func (im *IPManager) GetIPv6() ([]net.IP, error) {
	return GetIpv6()
}

// GetIPv6Eth 获取指定网卡的IPv6地址
func (im *IPManager) GetIPv6Eth(eth string) ([]net.IP, error) {
	return GetIpv6Eth(eth)
}

// GetPublicIPv6Eth 获取指定网卡的公共IPv6地址
func (im *IPManager) GetPublicIPv6Eth(eth string) ([]net.IP, error) {
	return GetPublicIpv6Eth(eth)
}

// CIDRToIPRange 根据CIDR表示的子网范围生成所有IP地址
func (im *IPManager) CIDRToIPRange(cidr string) ([]net.IP, error) {
	return CIDRToIPRange(cidr)
}

// IPsInSubnet 根据IP地址和子网掩码生成所有IP地址
func (im *IPManager) IPsInSubnet(baseIP, subnetMask string) ([]net.IP, error) {
	return IPsInSubnet(baseIP, subnetMask)
}

// GetDefaultNetworkSubnet 获取本机默认网卡的网段信息
func (im *IPManager) GetDefaultNetworkSubnet() ([]net.IP, error) {
	return GetDefaultNetworkSubnet()
}
